{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# CPSC 330 Lecture 3"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Lecture outline\n",
    "\n",
    "- 👋\n",
    "- **Turn on recording**\n",
    "- Announcements\n",
    "- Overfitting revisited (5 min)\n",
    "- Sources of error (15 min)\n",
    "- The fundamental tradeoff (10 min)\n",
    "- True/False (10 min)\n",
    "- Break (5 min)\n",
    "- Terminology: the 4 data sets (5 min)\n",
    "- Cross-validation (15 min)\n",
    "- True/False (10 min)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Learning objectives\n",
    "\n",
    "- Appropriately split a dataset into training and test sets\n",
    "- Recognize overfitting and/or underfitting by looking at train and test scores\n",
    "- Explain why it is generally not possible to get a perfect test score (zero test error) on a supervised learning problem\n",
    "- Describe the fundamental tradeoff between training score and the train-test gap\n",
    "- Compare and contrast training, validation, test and deployment sets/scenarios\n",
    "- Explain cross-validation \n",
    "- Perform cross-validation using `cross_val_score` and `cross_validate` in scikit-learn\n",
    "- Start to build a standard recipe for supervised learning: train/test split, hyperparameter tuning with cross-validation, test on test set."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Announcements\n",
    "\n",
    "- hw2 released\n",
    "  - Due Monday night\n",
    "  - Covers material from Tuesday and today\n",
    "  - You can work with a partner if you'd like - see instructions on website\n",
    "  - Keep monitoring Piazza (especially pinned posts) for announcements\n",
    "- Piazza poll on morale"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.size'] = 16\n",
    "\n",
    "from sklearn.dummy import DummyClassifier\n",
    "from sklearn.model_selection import train_test_split, cross_val_score, cross_validate\n",
    "from sklearn.tree import DecisionTreeClassifier, export_graphviz\n",
    "import graphviz\n",
    "\n",
    "from plot_classifier import plot_classifier"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Load the data from last class, do the same preprocessing:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_csv('data/330-students-cilantro.csv')\n",
    "df.columns = [\"meat\", \"grade\", \"cilantro\"]\n",
    "df_nodup = df.sort_values(by=\"cilantro\").drop_duplicates(subset=df.columns[:-1]).reset_index(drop=True)\n",
    "X_nodup = df_nodup[[\"meat\", \"grade\"]]\n",
    "y_nodup = df_nodup[\"cilantro\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Splitting your data (5 min)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's continue where we left off last class."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Important question: how does accuracy change vs. max_depth?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZoAAAEQCAYAAACJLbLdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAw/klEQVR4nO3deXhV1dn+8e/NLKAyCI6MQlVwqIoIVevQWrVVsLW1zlbr2NbWn9W+tbaKU9Vqa9+3k6JtVdBatVrQWrUqDlWiAgolCoIMYQZlBgkkeX5/7BN7PCZkB3NySM79ua5cJ1ln7b2fRMOTtdez11JEYGZmli8tCh2AmZk1b040ZmaWV040ZmaWV040ZmaWV040ZmaWV60KHcDWaIcddojevXsXOgwzsyZl4sSJ70dEt9x2J5oa9O7dmwkTJhQ6DDOzJkXS3JrafevMzMzyyonGzMzyyonGzMzyqtETjaTdJP1G0nhJ6yWFpN4pj20n6VZJiyR9mDnH52vo10LSlZLmSNogabKkkxr8mzEzszoVYkTTDzgZWAG8XM9j/wicD1wNHA8sAp6W9NmcftcDI4DfAscBJcDDkr68xVGbmdkWKUTV2UsRsSOApPOAL6U5SNJ+wGnAuRHx50zbi0ApcB0wLNPWHbgcuDkibsscPk5SP+Bm4MkG/F7MzKwOjT6iiYiqLTx0GLAJ+GvWuSqAB4FjJLXNNB8DtAFG5xw/GthHUp8tvL6ZmW2BpvQczUBgdkSsz2kvJUks/TKfDwTKgZk19AMYAMzOY5xmtoWmLljFM28vAW9fUjCXfKE/rVs27BikKSWaLiTzOrmWZ71f/boyPrnRTm6/j5F0AXABQM+ePT9dpGZWb2PeWsAVj0xhY0UVUqGjKV7fObIfrVs27DmbUqIRUNOfObn/S6bt9zERMRIYCTBo0CD/OWXWSKqqgl/+azq/G/ceB/fpwh/OOJAuHdoUOixrQE0p0SwHahpqdM56v/q1syTljGpy+5lZga0rr+Cyh97i6dIlnDq4B9cO25s2rfx4X3PTlBJNKfBVSe1z5mkGABv575xMKdAW2J2Pz9MMyLy+ne9AzaxuC1Z+yHn3TmD64tVcc8IAvvW53sj3zJqlpvSnw1igNfCN6gZJrYBvAs9ERHmm+SmSxHN6zvFnAFMjwoUAZgU2ce4Khv/2FeavWM+fzxnMOYf0cZJpxgoyopH09cynB2Zej5O0DFgWES9K6gW8B1wXEdcBRMRbkv4K/FpSa5LKsYuBPmQllYhYKul24EpJa4BJJMnoKGB4I3x7ZrYZj06az4//9h927tSOBy8YQr/uHQsdkuVZoW6dPZzz9e8zry8CR5BM3LfkkyOuc4AbgRuATsBk4NiImJTT7ypgLfADYCdgOnByRDzeMOGbWX1VVQW/eHo6d7z4HkP7duX3px9AZ0/6FwV9sgrYBg0aFN6PxqzhrC2v4NIH3+LZd5Zw+sE9GTFsYIM/q2GFJ2liRAzKbW9KxQBm1gTNX7Ge8+6dwIyla7l22EDOGtrL8zFFxonGzPJmwpzlXDhqIhsrq7jnnIM4rP8ndvm1IuBEY2Z58fCEefzksf+wW+f23H32IHbv5kn/YuVEY2YNqrIquOWpaYx8aRaH9tuB3512ANu3b13osKyAnGjMrMGs2bCJSx98i+emLeWsob342fEDPOlvTjRm1jDmLU8m/WcuW8v1J+7NmUN6FTok20o40ZjZp/b67OVcNHoilVXBqHMH87l+OxQ6JNuKONGY2RZbumYD95eU8fsXZtKjS3v+ePZB9NmhQ6HDsq2ME42Z1UtE8Prs5YwqmctTUxdTURUcO3Anbvn6vmy/jSf97ZOcaMwslbXlFTz25gJGj5/L9CVr2K5dK771ud6cPqSXRzG2WU40ZrZZM5asYVTJXB6dtIC15RXsvet2/OKkfTlhv13Ypk0Db8VozZITjZl9wqbKKp4pXcKokjmUzFpOm1YtOH7fnTlzSC8+26OTl5CxenGiMbOPLFm9gQdeK+Mvr5exdE05u3Xehh8ftycnD+rh7ZVtiznRmBW5iGD8rA8YXTKXp0uXUBXBEZ/pxs1De3H4Z7rTsoVHL/bpONGYFak1Gzbx6KQFjCqZy8yla+nUvjXnHdqH0w7uSa+unty3huNEY1ZkIoLfv/Aevxs3k/UbK9mvRydu+8Z+HL/vzrRr7cl9a3hONGZF5MONlVz+yGT+MWURxw7cie8cuTv77tap0GFZM+dEY1YkFq/awPn3TWDqwlX85Mt7cv5hfV09Zo3CicasCEyet5Lz75vAuvIK7j5rEF/Ya8dCh2RFxInGrJkbO3khVzw8mW7btmXUtw9hj522LXRIVmScaMyaqaqq4PZn3+U3z89kcO8u/OGMA+jasW2hw7Ii5ERj1gyt31jBDx+azD+nLubkQbtxw4n70KaVNyCzwnCiMWtmFq78kPPvm8A7i1bz06/sxbcP7eNJfysoJxqzZuTNshWcf99ENmyq5I9nH8SRe3YvdEhmTjRmzcXf31zAj/42hZ22a8dfzj+Y/jt60t+2Do1+01ZSD0mPSFolabWkRyX1THlsn8yxKyWtkzRO0qAa+s2RFDV8nNjg35BZgVVVBbc+PY1L//oW+/foxN+/e4iTjG1VGnVEI6k98DxQDpwNBHADME7SvhGxbjPHdgX+DawBLgTWA5dljh0cEe/kHPI0MCKnbXpDfB9mW4t15RVc9tBbPF26hFMH9+DaYXt70t+2Oo196+x8oC+wR0TMBJA0BZhBkjx+tZljLwZ2BA7POvZ5YBZwLXByTv/3I6KkYcM323osWPkh5907gemLV3PNCQP41ud6e9LftkqN/afPMKCkOlEARMRs4BVgeB3HDgFm5By7DngZOF6S55usaEycu4Lhv/0381es58/nDOacQ1xZZluvxk40A4GpNbSXAgPqOLYS2FhDezmwDbB7TvsJktZLKpdU4vkZay4enTSfU0eW0LFtKx77ziEc/pluhQ7JbLMaO9F0AVbU0L4c6FzHsdOB/pm5GgAktQAGZ5272uPAJcAxwOnABuAxSWfUdnJJF0iaIGnCsmXL6vxGzBpbZVVw8z+ncdlDkxnUuzN//+4h9OvesdBhmdWpELOGUUNbmjH/HSTx3idpd0k7A/8H9Mm8X/XRBSIuiYj7IuLliHgE+AIwAbip1qAiRkbEoIgY1K2b/0K0rc+IsaXc8eJ7nH5wT+49dzCd2ntrZWsaGjvRrODjI49qnal5pPORiJhFMjo5EJgJLASGArdnuizazLGVwMPAbpkEZdakTCpbwaiSuZxzSG9u/Oo+tG7pyjJrOlL/3yqpg6TvZ55jGSepf6b9FEl7pjxNKck8Ta4BwNt1HRwRfwN2zfTvFxEHAh2BeRFRVte3UH2alLGabRUqq4Kf/X0qO23Xjh9+aY9Ch2NWb6kSjaQewBTgVqA/8Hmg+omwI4HLU15vLDBEUt+sc/cGDsm8V6eIqIyIdyLiPUm7AN8E/lBH/K2AbwBlEbE4ZaxmW4UHXptL6cLV/PT4vejY1sWV1vSkHdH8kqS6qz/JravsOZUXSRJPGncBc4AxkoZLGgaMAeYBd1Z3ktRLUoWkq7PaWku6XdKJko6SdAnJvEtpJr7qfqdKelDSWZKOlHQKMC4T9/+kjNNsq/D+2nJufXo6h/Trylf28V1fa5rS/nl0NHBBRJRJapnz3gKS21l1ioh1ko4imVcZRZKwngMujYi1WV0FtOTjiTBIEt1pQCdgPvAn4OcRkV32PBvoTjL66kKygsAbwLER8XSaOM22Frf8cxofbqrk2mF7+zkZa7LSJpo2JEu/1GR7YFPaC2bmUk6qo88ccirRIqICOD7F+UuAo9LGY7a1mjh3OQ9PnM9Fh+/uMmZr0tLeOptC7cnhOGBiw4RjZgAVlVX87O+l7Lx9Oy45ql+hwzH7VNKOaG4FHskM3R/ItA2QNBz4NsnSMmbWQO5/rYy3F63m96cfQAcXAFgTl+r/4Ih4VNJ3gJuBczPN95HcTvteRDyVp/jMis6yNeXc9sx0Duu/A8ftvVOhwzH71FIlGknbA38mmcAfSjLZ/gHwakTUNndjZlvg5n9OY8OmSkYMG+gCAGsW6kw0mWdQPgC+GhGPA8/mPSqzIvXGnOX8bdJ8vnPE7uzezQUA1jzUWQyQqfZaQrJ6spnlSVIAMJVdtm/H91wAYM1I2qqz0cB5+QzErNiNKpnLtMVruPqEAbRv4wIAaz7S/t88BzhN0hskT/IvImfNsIj4U8OGZlY8lq7ZwK+eeZfPf6Ybxwx0AYA1L2kTze8yr7uSLOWSK0ie0jezLXDzk9Mor6jiWhcAWDOUNtH0qbuLmW2J12Z9wKNvLuB7R/ajzw4dCh2OWYNL+xzN3HwHYlaMNlVWcfWYUnbttA3fPdIFANY81WvGUdLewOEki1V+ALwUEVPzEZhZMbhv/FymL1nDnWceyDZtcterNWse0j6w2Qq4BziVjy92GZIeAL6V2cXSzFJaunoDt//rXY7YoxtfGrBjocMxy5u05c3XACcDV5PM12yTeb2aZOOxq2s/1Mxq8vMn32FjRRUjTnABgDVvaW+dnQFcHxE3ZrXNBW7M7E9zDkkyMrMUSmZ9wN/fWsj3j+pHbxcAWDOXdkSzCzC+lvdezbxvZilsqqzimjGl7NZ5Gy4+wgUA1vylTTQLgUNqee9zmffNLIV7X53D9CVruOaEgS4AsKKQ9tbZ/cBVkqoyny8CdgJOAa4CbslPeGbNy5LVG/j1szM4as/ufHGv7oUOx6xRpE00I4C+wLWZz6sJ+Eum3czq8PMn32FjZRXXnDDABQBWNNI+sFlBstbZjcDnSZ6jWQ68GBFv5zE+s2Zj/HsfMOathfzgC/3p1dUFAFY86vXAZkSUAqV5isWs2UpWAJhKjy7bcPERuxc6HLNGlaoYQNI5kkbU8t4ISWc3aFRmzcw9r8xhxtK1jDhhIO1auwDAikvaqrMfkCw5U5OlwKUNEo1ZM7R41QZ+/ey7fGHP7nxhL68AYMUnbaLpR+23zN4BfC/ArBY3PvkOm6qCa04YWOhQzAoibaKpAHao5b1u9bmgpB6SHpG0StJqSY9K6pny2D6ZY1dKWidpnKRBNfRrIelKSXMkbZA0WdJJ9YnTrCG8OvN9Hp+8kO8csTs9u7YvdDhmBZE20bwOXFTLexcBb6Q5iaT2wPPAnsDZwJlAf2CcpM2W4UjqCvwb2Bu4kOQZHjLH7pXT/XqSMuzfAscBJcDDkr6cJk6zhvD+2nIuf3gyPbu056LDPei34pW26uxG4FlJrwF3AwtIdts8DzgAODrlec4neR5nj4iYCSBpCjCDJHn8ajPHXgzsCByedezzwCyS53hOzrR1By4Hbo6I2zLHjpPUD7gZeDJlrGZbbFNlFd+9fxIfrNvIIxd9zgUAVtRSjWgi4kXg60B34E7gicxrN+CkiHgh5fWGASXViSJz7tnAK8DwOo4dAszIOXYd8DJwfGYrA4BjgDbA6JzjRwP7SPJuoZZ3N/7jHV6bvZybvrYP++y2faHDMSuotLfOiIgxEdEH2As4FNgzIvpGxNh6XG8gUNNGaaXAgDqOrQQ21tBeTrJtQfW9iYGZtpk5/aqLGeq6jtmn8sjE+dzz6hzOPaQPXztgt0KHY1Zw9XpgEyAipld/LqlrRNRW9lyTLsCKGtqXA53rOHY6cHT2NSW1AAZnnbv6dWVERA3XyO73MZIuAC4A6NkzVW2C2SdMnreSnzz2H4b27cpPvrxnocMx2yqkfWDzfElXZH29j6T5wFJJEyTtVI9r5iYA+PiunbW5gyTe+yTtLmln4P9INmADqMo6V72vEREjI2JQRAzq1q1ehXRmACxbU85FoyfSrWNbfnva/rRqmfqGgVmzlvY34RLgw6yvfwWsJHlQc3vgupTnWUHNI4rO1DzS+UhEzAJOBw4kuS22EBgK3J7psijzuhzorE+uWNg5632zBrWpsorvPjCJFes3cueZB9K1Y9tCh2S21UibaHoC0wAkbQ8cDvwoIn5DsrPmMSnPU0oyh5JrAFDn4pwR8TeSarcBQL+IOBDoCMyLiLKsa7Tlkw+RVs/NeBFQa3A3PPE2r89ezi0n7cveu3ry3yxb2kTTkv/emjqU5NbUC5mv55FUo6UxFhgiqW91g6TeJJuqpSoqiIjKiHgnIt6TtAvwTeAPWV2eIikaOD3n0DOAqZkqN7MG89CEedw7fi7nHdqH4Z/dtdDhmG110iaaGcBXMp+fArwaEeszX+9C+ttRdwFzgDGShksaBowhSVZ3VneS1EtShaSrs9paS7pd0omSjpJ0CTCBZATzy+p+EbGU5HbalZIuk3SEpD8ARwE/SRmnWSpvzVvJTx+byiH9uvLj4zz5b1aTtFVntwGjMqs0dwa+kfXekcCUNCeJiHWSjiJJBKNIJuifAy6NiLVZXUUyispOhEGyisBpQCdgPvAn4OcRkVv2fBWwlmQx0J1IKtZOjojH08RplsbSNRu4aNREum/Xlt+eeoAn/81qkXbjswcklQEHA29ExEtZby8h5W2vzLnKgM2uOxYRc8ipEstsvnZ8ymtUAjdkPswa3MaKKr4zehIrP9zIoxcfQucObQodktlWK/VzNBHxb5K1xnLbr2nQiMyagOueKGXC3BX836n7M2CX7QodjtlWzWN9s3p68PUyRpeUceHn+zJsv10KHY7ZVs+JxqweJpWt4OoxpRzWfwd+dKwn/83ScKIxS2np6mTyf8ft2/KbU/enZYs0C1qYmRONWQobK6q4+P5JrNlQwcgzB9GpvSf/zdKq96KaZsVoxOOlTJy7gt+etj977ezJf7P6SLuo5iuSzpTkBZys6DzwWhkPvFbGRYfvzvH7evLfrL7S3jrbBNwLLJT0K0meBbWiMHHucq4ZO5XPf6YbVxyzR6HDMWuS0u6weQTJhmf3AmcBpZJekPRNSa3zGJ9ZwSxZvYGLRk9il07b8JtTPPlvtqXqs8Pm9Ii4jGT15G+RLBHzADBf0s3ZC2WaNXXlFZVcNHoi68qTyf/t2/vvKbMtVe+qs4goj4hRJOuIvQx0A34EvCvp4Xpugma21YkIrhlTyptlK/nlN/Zjj522LXRIZk1avRKNpG0knSvpdeANkiTzA5IVnC8GPgfc3+BRmjWS5es28ounp/PgG/P47pG7c9w+Oxc6JLMmL1V5s6R9gAtJ9njpQLK0//9ExLisbndJWgw83OBRmuVRRDB5/iruGz+HJ6YsYmNFFSfstwuXHe3Jf7OGkPY5mskkWyf/GhgZEYtq6TcTGN8AcZnl3YcbK3l88kJGlczlPwtW0aFNS04etBtnDunt22VmDShtovkG8PfM8vu1ioh3SPanMdtqzXl/HaNL5vLwxPms+nAT/bt35LrhA/nq/ruybTtP+ps1tLSJZizQDliX+4akDsDGiNjUkIGZNaTKquD5aUsZVTKXl95dRqsW4piBO3Hm0F4c3KcLkkuXzfIlbaK5G2hNsrtlrjuBjcC5DRWUWUN5f205f31jHg+8VsaClR+y43Zt+X9f/AynDO7Bjtu1K3R4ZkUhbaI5EriilvfGArc2TDhmn15EMKlsBaPGz+XJ/yxmY2UVQ/t25adf2YsvDtiR1t5y2axRpU003YGltby3DNixYcIx23LrN1Yw5q2FjBo/l7cXrWbbtq047eCenDGkJ/26e3LfrFDSJpqlwD7AuBre2wf4oMEiMtsC97wym1/+613WbKhgz5225cav7s2Jn92VDm29QLlZoaX9LXwC+JmkFyJiSnVj5vmaq4DH8hGcWRpPTV3MiMff5rD+O/D9L/RnUK/Ontw324qkTTRXA0cDEyW9AcwnWfNsMDAb+Gl+wjPbvBlL1vDDh95ivx6duOusQbRr3bLQIZlZjrSrN78PHATcBAj4bOb1RuCgzPtmjWrVh5u4YNREtmnTkjvOOMBJxmwrlfoGdkSsJBnZXJ23aMxSqqwKLn3wTeYtX89fLhjCzttvU+iQzKwWrvO0Jun2f73LuOnLuGbYQA7q3aXQ4ZjZZqRONJL2lnS7pCclPZ/z8Vw9ztND0iOSVklaLelRST1THttT0r2SyiStl/SupBsyqxNk95sjKWr4ODFtnLb1+ud/FvHbcTP55qAenHFwqv91zKyA0q7efDDwIjAH6A9MAToDPUkKA2amPE974HmgHDgbCOAGYJykfSPiE0vcZB3bAXiWZIWCnwFlJPNG12Zi+mbOIU8DI3LapqeJ07Ze0xev4YcPT2b/np247sSBri4zawLSztH8HHgUOBPYBHw7IiZJOgoYRZIs0jgf6AvsEREzASRNAWaQbEPwq80cewhJQjkmIp7JtI2T1AW4XFL7iFif1f/9iChJGZc1AavWb+KCURPo0LYVd5xxIG1befLfrClIe+tsX2A0yQgEkm2ciYjnSZLMTSnPMwwoqU4ymXPMBl4BhtdxbJvM6+qc9pUk34f/tG3GKquC7z/4JgtXfsgdZxzgdcrMmpC0iaY1sC4iqoDlQPa2g9OBvVOeZyAwtYb2UmBAHcc+SzLyuUXSAEkdMyOqHwB31HDb7YTMPE65pBLPzzRttz0znRffXca1w/bmwF6e/DdrStImmvdIHtCEZH7mXEktJLUAzgEWpzxPF2BFDe3LSeZ8ahURG4BDSWIuBdYAz5GsWvC9nO6PA5cAx5DsCroBeEzSGbWdX9IFkiZImrBs2bJ03401in9MWcQfXniPUwf35DRP/ps1OfVZguYI4AGS+Zp/kNzCqgQ6At+vxzWjhrY6b3tJagf8lWSBzzNJigEGkzzXUwFc/NEFIi7JOfYxoITkFt/oGoOKGAmMBBg0aFBNMVoBTFu8mssfnswBPTsxYlhdg14z2xqlSjQRcU3W589KGgKcBLQHnsqanK/LCpJRTa7O1DzSyfZtkmTXLyLey7S9JGkVMFLSHRExuZb4KyU9THLbbefNbEVtW5GV6zdywX0T2badJ//NmrI6E42k1sCXgSmZiXsi4k3gzS24XinJPE2uAcDbdRy7D7AiK8lUez3zuhdQY6LJqB41ebTSBFRWBZf85U0Wr9rAgxcOobsn/82arDrnaDJbND8E9G6A640FhkjqW90gqTdJ6fLYOo5dDHSW1C+n/eDM64LaDpTUCvgGUBYRaeeTrIB+8fQ0Xp7xPtcNH8gBPTc7fWdmW7m0xQCzSOZGPq27SB76HCNpuKRhwBhgHsmW0ABI6iWpQlL2umr3kBQAPCnpbElHSroCuA2YSFIijaRTJT0o6axMn1NI9tE5EPifBvgeLM8en7yQO1+cxekH9+SUwZ78N2vq0iaaXwBXSer2aS6WKUE+CniX5EHP+0m2GTgqItZmdRXJszotso6dAwwB3iJ5dudJkgdARwJHZ0qvyZyvO8n20s+QJLBy4NiIePDTxG/59/bC1fzokSkM6tWZa06o6S6rmTU1aavOjiKZxJ8tqQRYxMfnOiIizk5zoogoIykk2FyfOdRQiRYRbwMn13FsSSZea2JWrNvIhaMnsP02rfn9GQfQppXXfDVrDtImmkNJlp5ZBuye+cjmCXb7VCoqq7jkL2+yZFU5f71wCN239eS/WXORtry5T74DseL2i6en8++Z7/OLr+/L/p78N2tWfG/CCm7MWwsY+dIszhrai5MH9Sh0OGbWwNJuE1Bn6U9m7sWsXkoXruJ//jaFwb278LPj/eS/WXOUdo5mDnXPw/ixbauX5euSJ/87t2/D704/gNYtPcA2a47SJppz+WSi6Qp8hWR/mesbMihr/iKCyx+ezLK15Txy0VC6bdu20CGZWZ6kLQa4p5a3fiVpFEmyMUvt6dIlPD9tKT87fgD77tap0OGYWR41xL2K0SQjHrNU1m+s4Pon3mbPnbbl7KG9Ch2OmeVZ2ltnm9Md8EMPltrvxs1kwcoPeejCobTyvIxZs5e26uzzNTS3IdlZ80rg5YYMypqvWcvWMvKlWXztgF0Z3Mc7ZZoVg7Qjmhf4ZDFA9RIxL5K16ZhZbSKCa8aW0q5VS648bq9Ch2NmjSRtojmyhrYNwFwvu29pPTV1MS/PeJ8RJwxwlZlZEUlbdfZivgOx5m39xgque+Jt9tp5O84Y4gIAs2KSaiZW0hBJNa6aLOkbkg6u6T2zar95fiaLVm3g+uEDXQBgVmTS/sbfRM1bMEOyhfJNDROONUczl67l7pdn8fUDd2NQbxcAmBWbtIlmP6CklvdeB/ZtmHCsuYkIRowtpV3rlvz4uD0LHY6ZFUDaRNNuM31bAh0aJhxrbp78z2L+PfN9rjhmD3bo6AIAs2KUNtG8Awyr5b1hwPSGCceak3XlyQoAA3fZjtMPdgGAWbFKW958B3CnpNXAXcB8YFfgAuDbwHfyE541Zf/3/AwWr97A704/gJYtPrEzt5kVibTlzXdJ2gP4f8Bl2W8Bt0fEyHwEZ03XzKVr+OPLszl50G4c2Ms7ZpoVs9RrnUXE5ZL+AHyRZIuA94FnI2JWvoKzpikiuHpMKe3btOR/jnUBgFmxq9eimhHxHvBenmKxZuKJKYt49b0PuP7EvenqAgCzopf2gc1zJI2o5b0Rks5u0KisyVpbXsEN/3ibvXfdjtMG17kDuJkVgbRVZz8APqjlvaXApQ0SjTV5v3luBktWl3P98L1dAGBmQPpE0w8oreW9d4Dd015QUg9Jj0haJWm1pEclpfrTV1JPSfdKKpO0XtK7km6Q1CGnXwtJV0qaI2mDpMmSTkobo22ZGUvW8Md/z+abg3qwf08XAJhZIu0cTQWwQy3vdUt7MUntgeeBcuBskqq1G4BxkvaNiHWbObYD8CzQGvgZUAYcBFwL9Ae+mdX9euBy4CpgInAK8LCk4yPiybTxWnrVBQAd2rbiR8fuUehwzGwrkjbRvA5cBDxUw3sXAW+kPM/5QF9gj4iYCSBpCjADuBD41WaOPYQkoRwTEc9k2sZJ6gJcLql9RKyX1J0kydwcEbdl9esH3Aw40eTB41MWMX7WB9zgAgAzy5H21tmNwGGSXpN0vqQvZ15fAw4jGUGkMQwoqU4yABExG3gFGF7HsW0yr6tz2leSfB/VEwLHZPqOzuk3GthHUp+UsVpKa8sruOGJt9ln1+051QUAZpYjVaLJ7EfzdaA7cCfwROa1G3BSRLyQ8noDgak1tJcCA+o49lmSkc8tkgZI6ijpKJJChTuybrsNJLk1NzPn+Oo5prquY/X0v8++y7K15Vx/ogsAzOyT6vPA5hhgTGaFgK7A+xHxbj2v1wVYUUP7cmCzs8cRsUHSocDf+Hhhwt3A93KusTIicreeXp71/idIuoBkSR169vRf5WlNX7yGP70yh1MO6sFne3QqdDhmthWq1wObABHxaRfQzE0A8N/bXrWS1A74K8mo6kySYoDBwNUkxQoXZ52r3tfILKMzEmDQoEE1HW85kgKAqWzbrhVXHOMVAMysZvVKNJL2A/Yg2TbgYyLivhSnWEHNI4rO1DzSyfZt4AigX2aFAoCXJK0CRkq6IyImkxkdSVLOqKZ6xLQcaxBjJy/ktdnL+flX96FLhzZ1H2BmRSlVopHUCfgHMKS6KfOa/Q95mkRTSs07dQ4A3q7j2H2AFVlJptrrmde9gMmZa7QlebYne56mem6mrutYCms2bOKGf7zDfrttzzcP6lHocMxsK5a26uznJPMynydJMl8FjgLuB2aR3MJKYywwRFLf6gZJvUlKl8fWcexikpFKv5z2gzOvCzKvTwEbgdNz+p0BTM1Uudmn9OtnZ/D+2nKu8woAZlaHtInmGJJkU72d8/yIeCEiziKpBvtByvPcBcwhKSoYLmkYMAaYR1LFBoCkXpIqJF2ddew9wBrgSUlnSzpS0hXAbSQPZb4CEBFLgduBKyVdJumIzKrTRwE/SRmnbca0xau559U5nDq4J/u5AMDM6pB2jmZnYFZEVEraAGyb9d6jwINpThIR6zIlybcDo0hGR88Bl0bE2qyuItkiukXWsXMkDQFGkKwmsANJghoJ3BgRVVnHXwWsJUmAO5HsAHpyRDye8vu1WkQEV/+9lO3ateKKL3kFADOrW9pEsxjolPl8LjAUeCHzde6trM2KiDJgs+uORcQcaqgSi4i3gZNTXKOSJBndUJ/YrG5/f2sBr89Zzs1f24fOLgAwsxTSJpp/kySXJ0hGItdk5lYqSNYsq2t+xZqB1Rs2ceM/prFfj06cPMgFAGaWTtpEcy2wS+bzW0kKA74JtCdJMpc0fGi2tbn9X+/ywbpy/vytg2jhAgAzSylVosneWTMiNgE/zHxYkXh74WrufXUOpx/ck312277Q4ZhZE5K26syKWPUKAJ3at+FyFwCYWT050VidHp20gAlzV/DjY/ekU3sXAJhZ/TjR2Gat+nATN/3zHfbv2YmvH7hbocMxsyao3otqWnG5/V/vsnzdRu45Z7ALAMxsi3hEY7UqXbiK+8bP4Ywhvdh7VxcAmNmWcaKxGlVVBVePKaVz+zb88GgXAJjZlnOisRr9bdJ8Js5dwY+P25Pt27cudDhm1oQ50dgnrFq/iZv/OY0De3XmpANcAGBmn46LAewTfvmv6axYv5H7hrsAwMw+PY9o7GOmLljF6JK5nDW0NwN3cQGAmX16TjT2kaqq4GdjptKlQxv+39GfKXQ4ZtZMONHYRx6ZOJ83y1Zy5XF7sf02LgAws4bhRGMArFy/kZufmsZBvTvztQN2LXQ4ZtaMONEYALc9M51VH27iuuF7I7kAwMwajhON8Z/5q7j/tTLOGtqLvXbertDhmFkz40RT5Kqqgp+OmUrXDm1dAGBmeeFEU+QemjCPyfNWctVX9mS7di4AMLOG50RTxFas28gtT01jcO8unPhZFwCYWX440RSxW5+ZzuoNFVx34kAXAJhZ3jjRFKnJ81byl9fL+NbnerPnTi4AMLP8caIpQpWZFQB26NiWS7/Yv9DhmFkz50RThP76xjymzF/FT7+yF9u6AMDM8qzRE42kHpIekbRK0mpJj0rqmeK4EZKilo8NOX3n1NLvxLx9Y03E8nUb+cXT0zi4TxeG7bdLocMxsyLQqNsESGoPPA+UA2cDAdwAjJO0b0Ss28zhdwNP5bR1yLSNraH/08CInLbpWxB2s3Lr09NYs6GC60/0CgBm1jgaez+a84G+wB4RMRNA0hRgBnAh8KvaDoyI+cD87DZJZ5J8D/fWcMj7EVHSQHE3C2+WreDBN+Zx3qF9+MyO2xY6HDMrEo1962wYUFKdZAAiYjbwCjB8C853NrCEZPRim1FZFVw9ppTu27blB1/0CgBm1ngaO9EMBKbW0F4KDKjPiSTtBhwJ3B8RFTV0OUHSeknlkkqKfX7mL6+X8Z8Fq7jqKwPo2NYbq5pZ42nsRNMFWFFD+3Kgcz3PdSZJ/DXdNnscuAQ4Bjgd2AA8JumM2k4m6QJJEyRNWLZsWT1D2bp9sLacW5+eztC+XTlh350LHY6ZFZlC/GkbNbRtyaz0WcCbETHlExeIuORjJ5ceA0qAm4DRNQYVMRIYCTBo0KCaYmw0k+et5IHXyihbvr5BzrdkzQbWlVdw3XCvAGBmja+xE80KklFNrs7UPNKpkaTBwJ7ApWn6R0SlpIeBWyTtHBGL0l6rsWzYVMnjkxcyqmQuU+avokOblgzYZTu0RTn443bo0JYLDutLfxcAmFkBNHaiKSWZp8k1AHi7Huc5G6gAHqjHMdX/Yhd0tJJr7gfruP+1Mh6aMI+V6zfRv3tHrhs+kK/uv6sfpjSzZqGxE81Y4DZJfSNiFoCk3sAhwI/TnEBSG+AU4MmISDWZIqkV8A2gLCIWb0ngDamyKnhh+lLuGz+XF99dRqsW4piBO3HGkF4M6dvFt7fMrFlp7ERzF/A9YIykn5KMLq4H5gF3VneS1At4D7guIq7LOcfxJLffaioCQNKpJKXST2bOuyPwXeBA4NSG/Gbq64O15fx1wjzuLyljwcoP2XG7ZK2xUwf3ZMft2hUyNDOzvGnURBMR6yQdBdwOjCK5nfUccGlErM3qKqAlNVfFnU1SpfZELZeZDXQHbiVJSOuBN4BjI6LRn7eJCN6ct5JR4+fyjymL2FhZxdC+XbnqK3tx9IAdad3Sy82ZWfPW6FVnEVEGnFRHnznUUokWEZt9sDOzGsBRWxpfQ/lwYyVj3lrAqJK5lC5cTce2rTh1cA/OGNLLk/JmVlT85F4Dm7VsLaNLynhk4jxWb6hgjx235YYT9+bE/Xf1g5JmVpT8L18DqaoKzrtvAs9PW0qrFuLYvXfirKG9Oah3Z0/um1lRc6JpIC1aiN5dO3DZ0Z/hlME96L6tJ/fNzMCJpkFdfUK9lmszMysKLnkyM7O8cqIxM7O8cqIxM7O8cqIxM7O8cqIxM7O8cqIxM7O8cqIxM7O8cqIxM7O8UsRWtQ/YVkHSMmBuoeMoEjsA7xc6iCLln33hNNeffa+I6Jbb6ERjBSVpQkQMKnQcxcg/+8Iptp+9b52ZmVleOdGYmVleOdFYoY0sdABFzD/7wimqn73naMzMLK88ojEzs7xyojEzs7xyorFGJekISVHDx8pCx9bcSNpN0m8kjZe0PvNz7l1Dv86S7pb0vqR1kp6VtE8BQm420vzsJfWu5XchJHUqTOT54R02rVC+D7yR9XVFoQJpxvoBJwMTgZeBL+V2kCRgLNAHuARYAVwJjJP02YiY33jhNit1/uyz3ETy3yDbmjzFVRBONFYo70RESaGDaOZeiogdASSdR83/2A0DDgWOiohxmb7jgdnAj0j+ILD6S/Ozrzaruf8u+NaZWTMVEVUpug0DFlYnmcxxq4DHgeH5iq25S/mzLxpONFYo90uqlPSBpAck9Sx0QEVqIDC1hvZSoKekjo0cTzG6SVKFpFWSxjbH+THfOrPGtgr4JfAisBrYH/gJMF7S/hGxtJDBFaEuwJwa2pdnXjsDaxstmuJSDtwJPAMsA/Yk+V14VdLgiHinkME1JCcaa1QR8SbwZlbTi5JeAl4nmQ/4aUECK14CanpqW40dSLGJiEXARVlNL0t6imQ0eRVwRkECywPfOrOCi4hJwLvAQYWOpQgtJxnV5OqceV3RiLEUvYiYB/ybZva74ERjW4va/rK2/ColmafJNQAoiwjfNmt8ze53wYnGCk7SIOAzwGuFjqUIjQV2lXR4dYOk7YAT+OSzHZZnmaKYQ2hmvwueo7FGJel+kmc0JgErSYoBrgQWAL8pXGTNk6SvZz49MPN6XGYH2WUR8SJJMhkPjJZ0Bf99YFPALxo73uakrp+9pF+S/LE/nqQYYA+Sn30V8PPGjjefvHqzNSpJVwKnAr2A9sBi4J/ANZnJUWtAkmr7BX8xIo7I9OkC3AacCLQj+YfvsoiY3BgxNld1/ewlnQtcTLKKwLYkWzs/D1wbEdMbKcxG4URjZmZ55TkaMzPLKycaMzPLKycaMzPLKycaMzPLKycaMzPLKycaMzPLKycasyZM0j2S5uTx/J0kjZB0QA3vvSDp3/m6tjUfTjRmtjmdgGuATyQas7ScaMzMLK+caMyAzO2hkLSnpKclrZNUJumczPtnSpomaa2kcZJ2zzn+FEnPS1qW6fOmpLNz+pyXucaJWW0tJb0k6T1J29YR4xckTZK0IdP/wlr6tZd0i6TZkjZmXq+S1CKrzxGZWE7K3H5bIWm1pPsldc306U2yLh3AXZn+IelbOdf7Yiau9ZKmZn9/ZuBFNc1yPQzcRbL213eAP0nqDxwB/BhoDfwv8ABwcNZxfYFHgJtJFkX8PHC3pG0i4g6AiLhb0pcy7W9ExALgZ8BQ4NCIWFNbUJL2Ap4EJgCnAG2BEUBHoDKrXyvgaZJl/q8H/gMMyVynC/DDnFP/GniWZP25/iSLOe4CHAksAr4GPArcxH9Xc34v6/jdMz+Pm0jW6voh8IikPSNiZm3fjxWZiPCHP4r+g+Qf7QDOymrrDFQAHwDbZbV/P9O3Vy3nakHyR9xdwOSc9zoBc4FxwOGZ81+ZIr77Sf4h75DV1gPYCMzJajszE9vnc46/KtO3e+brIzL9nsrpd3qm/QuZr3tnvj6vhpheADYB/bPaupMkvp8U+r+pP7aeD986M/u4f1Z/EhErgKVASUSszuozLfPao7pBUn9Jf5G0gOQf303AeSRLv38kIlYCpwGHkYw8XgZuSRHXUODJiFiXda55wCs5/Y4lSWSvSmpV/UGyL31rktFNtodyvn6YZEQ2NEVMADMiYkZWTEtJfmY9Ux5vRcC3zsw+Lnfr4o21tEGypD6SOgL/AtaT3F57L9PnYuDcGq5RAkwnub31vxFRlSKunYElNbQvAfpkfd2dZAuGTbWcp2sNx38kIjZKWgHsmiImSLaCzlVO5mdjBk40Zg1hKMk/7odFxEfPlWRGEjW5hmQ+ZApwu6RxEbGqjmssAnasoT237QOSCfyTaznPnM0dL6kNyS3DBXXEY5aab52ZfXrtM68fjSIkdQaG53aUdBjwE5I5kxNI5mz+kOIa44EvS+qQda4eJNv+ZnuK5Jbe2oiYUMPH+zn9cxPSN/jvro+QjE4AtkkRo1mNnGjMPr1XgdXA7yR9RdLJwIskk/cfySSf+0kKAW6LiDLgAuDU3FLoGtwAbAc8I+nEzDWe4ZO30+7PxPOcpMsyJdHHSfqepGcktc/pP1DSnyUdI+kSkqT3YkQ8l3l/Ccko6RRJh0saVF3+bJaWE43ZpxQRy4CvAi1JSpxvAu4GRud0HUkyMjgrIiJz7MPAH4HfSuq3mWu8A3yZZPT0V5Iy6l8Dz+X02wQcQ1LxdgFJSfT9wNkkCWgjH/cDQJlz/hx4Avh61vmqSIoaOpOUQb9BMhIzS81bOZsVIUlHkIysjo6IZwsbjTV3HtGYmVleOdGYmVle+daZmZnllUc0ZmaWV040ZmaWV040ZmaWV040ZmaWV040ZmaWV/8fv24qivkNaTMAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "max_depths = np.arange(1, 18)\n",
    "scores = []\n",
    "for max_depth in max_depths:\n",
    "    score = DecisionTreeClassifier(max_depth=max_depth).fit(X_nodup, y_nodup).score(X_nodup, y_nodup)\n",
    "    scores.append(score)\n",
    "plt.plot(max_depths, scores);\n",
    "plt.xlabel(\"max depth\");\n",
    "plt.ylabel(\"accuracy score\");"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- We could also look at the same plot but flip the $y$ axis. \n",
    "- Currently it is accuracy, or % correct. But we can also do error, or % incorrect, which is very common:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(max_depths, 1-np.array(scores))\n",
    "plt.xlabel(\"max depth\");\n",
    "plt.ylabel(\"error\");"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Why not just use a very deep decision tree for every supervised learning problem and get super high accuracy?\n",
    "- Well, the goal of supervised learning is to predict unseen/new data...\n",
    "  - The above decision tree has 100% accuracy on the training data **where we already know the answer**.\n",
    "  - It perfectly labels the data we used to make the tree...\n",
    "  - But we want to know how our model performs on data not used in training.\n",
    "  - We will split our original dataset into two parts, one for \"training\" and one for \"testing\"."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train, df_test = train_test_split(df_nodup, random_state=123)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"img/train-test-split.png\" width=\"800\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note: `train_test_split` splits randomly. \n",
    "\n",
    "- If you just took the top part and the bottom part of your dataframe, you could get terrible results.\n",
    "- E.g. if they were sorted by one of the columns.\n",
    "- **Make sure you split randomly** ideally be using a function like `train_test_split`.\n",
    "\n",
    "Continuing on:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "scatter = plt.scatter(df_train[\"meat\"], df_train[\"grade\"], c=df_train[\"cilantro\"]==\"Yes\", cmap=plt.cm.coolwarm);\n",
    "plt.xlabel(\"Meat consumption (% days)\");\n",
    "plt.ylabel(\"Expected grade (%)\");\n",
    "plt.legend(scatter.legend_elements()[0], [\"No\", \"Yes\"]);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "scatter = plt.scatter(df_test[\"meat\"], df_test[\"grade\"], c=df_test[\"cilantro\"]==\"Yes\", cmap=plt.cm.coolwarm);\n",
    "plt.xlabel(\"Meat consumption (% days)\");\n",
    "plt.ylabel(\"Expected grade (%)\");\n",
    "plt.xlim((0,100));\n",
    "plt.ylim((0,100));\n",
    "plt.legend(scatter.legend_elements()[0], [\"No\", \"Yes\"]);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is where we left off last time."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train = df_train[[\"meat\", \"grade\"]]\n",
    "y_train = df_train[\"cilantro\"]\n",
    "X_test  = df_test[[\"meat\", \"grade\"]]\n",
    "y_test  = df_test[\"cilantro\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "tree = DecisionTreeClassifier()\n",
    "tree.fit(X_train, y_train);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_classifier(X_train, y_train, tree, ticks=True, lims=(0,100,0,100), vmin=0, vmax=1);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_classifier(X_test, y_test, tree, ticks=True, lims=(0,100,0,100), vmin=0, vmax=1);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- The plot above shows the boundaries from the tree trained on **training data**, but the points shown are **test data**.\n",
    "- In this plot we can see some mistakes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tree.score(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tree.score(X_test, y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Our accuracy on the testing data is lower than on the training data. This phenomenon is called **overfitting**.\n",
    "- Sometimes overfitting can be totally disastrous. \n",
    "- One way to combat this issue is to reduce the max depth!\n",
    "- We're really just at the tip of the iceberg here - overfitting is a huge problem in machine learning and there are many ways to (try to) deal with it. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def make_traintest_plot(X_train, y_train, X_test, y_test):\n",
    "\n",
    "    max_depths = np.arange(1, 17)\n",
    "    train_error = []\n",
    "    test_error = []\n",
    "    for depth in max_depths:\n",
    "        tree = DecisionTreeClassifier(max_depth=depth, random_state=1)\n",
    "        tree.fit(X_train, y_train)  \n",
    "        train_error.append(1 - tree.score(X_train, y_train))\n",
    "        test_error.append(1 - tree.score(X_test, y_test))\n",
    "\n",
    "    f = plt.figure()\n",
    "    plt.plot(max_depths, train_error, label=\"training\");\n",
    "    plt.plot(max_depths, test_error, label=\"testing\");\n",
    "    plt.xlabel(\"max depth\");\n",
    "    plt.ylabel(\"error\");\n",
    "    plt.title(\"error vs. max depth\");\n",
    "    plt.legend();\n",
    "    return f\n",
    "\n",
    "f = make_traintest_plot(X_train, y_train, X_test, y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Sources of error (15 min)\n",
    "\n",
    "# TODO: update per https://piazza.com/class/kb2e6nwu3uj23?cid=228"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We're going to think about 3 types of error:\n",
    "\n",
    "- $E_\\textrm{train}$ is your training error.\n",
    "- $E_\\textrm{test}$ is your test error.\n",
    "- $E_\\textrm{best}$ is the best possible error you could get for a given problem."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Q: why is $E_\\textrm{best}>0$ ?\n",
    "\n",
    "<br><br><br><br>\n",
    "\n",
    "- Let's think about a dataset with no features. \n",
    "- In that case, all you can do is what `DummyClassifier` does. \n",
    "- So in this case there's a \"best error\" since you cannot do better than that with no features. \n",
    "- If there are features, we'll be able to do better.\n",
    "- With this `DummyClassifier` scenario $E_\\textrm{best} = E_\\textrm{train} = E_\\textrm{test}$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6338028169014085"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dc = DummyClassifier(strategy='prior')\n",
    "dc.fit(X_train, y_train);\n",
    "dc.score(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.75"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dc.score(X_test, y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- But the scores aren't the same?\n",
    "- This is where everything gets tricky.\n",
    "- They will be the same **on average** because both sets are just random samples from the data.\n",
    "- But they may not be the same in a specific case.\n",
    "- The more data you have, the closer they will be (law of large numbers)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next scenario: a dataset with random features and a deep decision tree."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_random = np.random.rand(len(y_train), 10)\n",
    "X_test_random = np.random.rand(len(y_test), 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Q: what is $E_\\textrm{best}$ here?\n",
    "\n",
    "<br><br><br><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "A: $E_\\textrm{best}$ is still the same as before, because the features are not useful, but $E_\\textrm{train}$ **is lower now**. $E_\\textrm{test}$ may get higher due to overfitting."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "tree = DecisionTreeClassifier()\n",
    "tree.fit(X_train_random, y_train);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tree.score(X_train_random, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5416666666666666"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tree.score(X_test_random, y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So here, in this overfitting scenario $E_\\textrm{train}<E_\\textrm{best}<E_\\textrm{test}$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next scenario: our cilantro dataset\n",
    "\n",
    "- In this case, assuming there is any actual relationship between the features and the target, we can start lowering $E_\\textrm{best}$.\n",
    "- The more \"signal\" (information about the target) is contained in the features, the lower $E_\\textrm{best}$ can go.\n",
    "- But it won't go to zero on a real dataset, because **the target is not a fixed deterministic function of the features** in basically any real case.\n",
    "  - There is always some \"unexplained\" part or \"random\" part.\n",
    "- To make matters worse, and this is one of the biggest challenges in supervised learning, you never know what $E_\\textrm{best}$ actually is.\n",
    "\n",
    "#### Standard overfitting scenario\n",
    "\n",
    "$E_\\textrm{train}<E_\\textrm{best}<E_\\textrm{test}$\n",
    "\n",
    "- If $E_\\textrm{train}$ is low, that is the overfitting scenario. It is fairly common to have at least a bit of this.\n",
    "- $E_\\textrm{test}$ cannot be smaller than $E_\\textrm{best}$ basically by definition. In reality you won't have them equal.\n",
    "\n",
    "#### Standard underfitting scenario\n",
    "\n",
    "$E_\\textrm{best}<E_\\textrm{train}\\lesssim E_\\textrm{test}$\n",
    "\n",
    "- In that case your model is too simple, e.g. `DecisionTreeClassifier` with `max_depth=1` or `DummyClassifier`\n",
    "- The model is so simple that it doesn't even capture the patterns **in the training data**.\n",
    "- So even the training error is not that low.\n",
    "- In this case, you likely have very little overfitting (because you have very little fitting, period); hence $E_\\textrm{train}\\lesssim E_\\textrm{test}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Standard question to ask yourself\n",
    "\n",
    "Which of these scenarios am I in?\n",
    "\n",
    "Q: How can you figure this out?\n",
    "\n",
    "<br><br><br><br>\n",
    "\n",
    "A: You can't see $E_\\textrm{best}$ but you can see $E_\\textrm{train}$ and $E_\\textrm{test}$. \n",
    "\n",
    "- If they are very far apart, you are more likely in the overfitting regime. Try decreasing model complexity.\n",
    "- If they are very close together, you are more likely in the underfitting regime. Try increasing model complexity."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Can we find the underfitting and overfitting regimes?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- This cilantro dataset is a bit difficult to deal with because there's hardly any signal (my bad).\n",
    "- In hw2 you'll work with a more reasonable dataset and get something like this:\n",
    "\n",
    "![](img/spotify_scores.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here we see the more typical behaviour where the test accuracy (flipped things here) goes up and then tapers off or goes back down."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## The fundamental trade-off (5 min)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The \"fundamental tradeoff\" of supervised learning: \n",
    "\n",
    "> As you increase model complexity, $E_\\textrm{train}$ tends to go down but $E_\\textrm{test}-E_\\textrm{train}$ tends to go up."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- If your model is very simple, like `DummyClassifier`, then you won't really learn any \"specific patterns\" of the training set, but your model won't be very good in general. This is **underfitting**.\n",
    "- If your model is very complex, like a `DecisionTreeClassifier(max_depth=None)`, then you will learn crazy patterns that get every single training example correct, but there will be a huge gap between training error and test error. This is **overfitting**."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note: this fundamental trade-off also called the [bias/variance tradeoff](https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff) in statistics."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Break (5 mins)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## True/False (10 min)\n",
    "\n",
    "1. In supervised learning, the training error is always lower than the test error.\n",
    "2. The fundamental tradeoff of ML states that as training error goes down, test error goes up.\n",
    "3. More \"complicated\" models are more likely to overfit than \"simple\" ones.\n",
    "4. It is possible to construct a problem with $E_\\textrm{best}=E_\\textrm{train}=E_\\textrm{test}=0$.\n",
    "\n",
    "<br><br><br><br><br><br><br><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Terminology: the 4 data sets (5 min)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- The purpose of our test set is to assess model performance.\n",
    "- But what about tuning hyperparameters? \n",
    "- We **do not want to use the test set for this** because in that case it will no longer truly be \"unseen data\".\n",
    "  - It won't be seen by `fit` but it will still be indirectly used in our process.\n",
    "- So we actually want to split our dataset into 3 splits: train, validation, and test.\n",
    "  - We can use the validation data for model tuning (e.g. selecting hyperparameters) and the test data for a final, \"pure\" model assessment.\n",
    "- The more you use it (e.g. more hyperparameters you try), the more compromised the validation set becomes.\n",
    "  - This is sometimes referred to as \"overfitting on the validation set\".\n",
    "  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"img/train-valid-test-split.png\" width=\"800\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- There isn't good concensus on the terminology. What is test? What is validation?\n",
    "- In CPSC 330, validation and test data are cases where we have access to the target values (i.e. we split them off).\n",
    "  - Validation data is used for model validation and hyperparameter tuning; we don't pass these into `fit`.  \n",
    "  - Test data is used as a final sanity-check.\n",
    "- I will use \"deployment\" to refer to data where we do **not** have access to the target values.\n",
    "\n",
    "So:\n",
    "\n",
    "- Deployment error is the thing we _really_ care about.\n",
    "- We use validation/test error as a proxy for deployment error, and we hope they are similar.\n",
    "- So, if our model does well on the validation/test data, we hope it will do well on deployment data."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "|         | `fit` | `score` | `predict` |\n",
    "|----------|-------|---------|-----------|\n",
    "| Train    | ✔️      | ✔️      | ✔️         |\n",
    "| Validation |      | ✔️      | ✔️         |\n",
    "| Test    |       |  once   | once         |\n",
    "| Deployment    |       |       | ✔️         |"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Keep in mind we are splitting the data \"vertically\" with horizontal cuts:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>meat</th>\n",
       "      <th>grade</th>\n",
       "      <th>cilantro</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>89</th>\n",
       "      <td>20.0</td>\n",
       "      <td>72</td>\n",
       "      <td>Yes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>100.0</td>\n",
       "      <td>75</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>82</th>\n",
       "      <td>71.0</td>\n",
       "      <td>65</td>\n",
       "      <td>Yes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>28.0</td>\n",
       "      <td>85</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>14.0</td>\n",
       "      <td>80</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>43.0</td>\n",
       "      <td>93</td>\n",
       "      <td>Yes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>83</th>\n",
       "      <td>57.0</td>\n",
       "      <td>90</td>\n",
       "      <td>Yes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>100.0</td>\n",
       "      <td>85</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>92</th>\n",
       "      <td>57.0</td>\n",
       "      <td>75</td>\n",
       "      <td>Yes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>66</th>\n",
       "      <td>90.0</td>\n",
       "      <td>90</td>\n",
       "      <td>Yes</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>71 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     meat  grade cilantro\n",
       "89   20.0     72      Yes\n",
       "24  100.0     75       No\n",
       "82   71.0     65      Yes\n",
       "9    28.0     85       No\n",
       "21   14.0     80       No\n",
       "..    ...    ...      ...\n",
       "57   43.0     93      Yes\n",
       "83   57.0     90      Yes\n",
       "17  100.0     85       No\n",
       "92   57.0     75      Yes\n",
       "66   90.0     90      Yes\n",
       "\n",
       "[71 rows x 3 columns]"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "By the end of class today we'll have a general recipe for a train/validation/test procedure that we'll use throughout the course (and hopefully beyond!)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Earlier we talked about $E_\\textrm{best}$ and $E_\\textrm{train}$ and $E_\\textrm{test}$\n",
    "- Now we have two new players, $E_\\textrm{validation}$ and $E_\\textrm{deployment}$\n",
    "- We can **observe and control** $E_\\textrm{train},E_\\textrm{validation},E_\\textrm{test}$\n",
    "- We **care about** $E_\\textrm{deployment}$\n",
    "- We would **love to know** $E_\\textrm{best}$ but we never will"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Finding the \"optimal model\"\n",
    "\n",
    "- We could pick the model with the lowest validation error.\n",
    "- This is a reasonable approach for now.\n",
    "- But it would also be nice to have a model with low approximation error if possible.\n",
    "\n",
    "\n",
    "#### Validation vs. deployment\n",
    "\n",
    "- A big problem is that we use validation error as a proxy for deployment error, but it might not be.\n",
    "- We'll have to revisit this issue as we go through the course."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Cross-validation (15 min)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There are several problems with having a single train/validation split:\n",
    "\n",
    "- Only using a portion of your data for training and only a portion for validation.\n",
    "- If your dataset is small you might end up with a tiny training and/or validation set.\n",
    "- You might be unlucky with your splits such that they don't align well or don't well represent your test data."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### A solution: $k$-fold cross-validation\n",
    "\n",
    "The figure below shows 4-fold cross-validation:\n",
    "\n",
    "<img src=\"img/cross-validation.png\" width=\"1000\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Helps us use all of our data for training/validation!\n",
    "  - Get a more \"robust\" measure of error on unseen data.\n",
    "- Split the data into $k$ folds ($k>2$, often $k=10$).\n",
    "  - Each \"fold\" gets a turn at being the validation set.\n",
    "  - We then average our $k$ results.\n",
    "- The main disadvantage here is that this is slower, which is a problem for bigger data sets / more complex models."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import cross_val_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "tree = DecisionTreeClassifier(max_depth=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.73333333, 0.64285714, 0.5       , 0.71428571, 0.64285714])"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cv_score = cross_val_score(tree, X_train, y_train, cv=5)\n",
    "cv_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Average cross-validation score = 0.65\n"
     ]
    }
   ],
   "source": [
    "print(f\"Average cross-validation score = {np.mean(cv_score):.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can change the number of folds. The default is 5:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.75      , 0.85714286, 0.71428571, 0.57142857, 0.71428571,\n",
       "       0.57142857, 0.71428571, 0.57142857, 0.71428571, 0.71428571])"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cross_val_score(tree, X_train, y_train, cv=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### A note on randomness\n",
    "\n",
    "- `cross_val_score` does not shuffle the data; we rely on `train_test_split` for that.\n",
    "- However, you might still get different results each time.\n",
    "- If so, the randomness is due to the classifier itself.\n",
    "  - There is sometimes randomness in `fit`.\n",
    "  - For example with `DecisionTreeClassifier`, if there is a tie, it breaks the tie randomly.\n",
    "  - This is not that important but something to watch out for."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### sklearn functions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- `cross_val_score` is the simpler scikit-learn function for cross-validation\n",
    "- A more powerful function is `cross_validate`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import cross_validate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'fit_time': array([0.00257921, 0.00290704, 0.00352478, 0.00243187, 0.00223517,\n",
       "        0.00281215, 0.00233388, 0.00205803, 0.00253797, 0.00262189]),\n",
       " 'score_time': array([0.00166583, 0.00280499, 0.00175786, 0.00139523, 0.00198984,\n",
       "        0.00252295, 0.00142884, 0.00133824, 0.00248218, 0.00213504]),\n",
       " 'test_score': array([0.75      , 0.85714286, 0.71428571, 0.57142857, 0.71428571,\n",
       "        0.57142857, 0.71428571, 0.57142857, 0.71428571, 0.71428571])}"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cross_validate(tree, X_train, y_train, cv=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is a bit of a mess, suggest always turning it into a DataFrame:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>fit_time</th>\n",
       "      <th>score_time</th>\n",
       "      <th>test_score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.002774</td>\n",
       "      <td>0.002330</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.002384</td>\n",
       "      <td>0.001840</td>\n",
       "      <td>0.857143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.002290</td>\n",
       "      <td>0.001514</td>\n",
       "      <td>0.714286</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.002478</td>\n",
       "      <td>0.001614</td>\n",
       "      <td>0.571429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.002288</td>\n",
       "      <td>0.001497</td>\n",
       "      <td>0.714286</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.003246</td>\n",
       "      <td>0.002257</td>\n",
       "      <td>0.571429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.002602</td>\n",
       "      <td>0.001321</td>\n",
       "      <td>0.714286</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.002293</td>\n",
       "      <td>0.001466</td>\n",
       "      <td>0.571429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.004439</td>\n",
       "      <td>0.002873</td>\n",
       "      <td>0.714286</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.003176</td>\n",
       "      <td>0.001650</td>\n",
       "      <td>0.714286</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   fit_time  score_time  test_score\n",
       "0  0.002774    0.002330    0.750000\n",
       "1  0.002384    0.001840    0.857143\n",
       "2  0.002290    0.001514    0.714286\n",
       "3  0.002478    0.001614    0.571429\n",
       "4  0.002288    0.001497    0.714286\n",
       "5  0.003246    0.002257    0.571429\n",
       "6  0.002602    0.001321    0.714286\n",
       "7  0.002293    0.001466    0.571429\n",
       "8  0.004439    0.002873    0.714286\n",
       "9  0.003176    0.001650    0.714286"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.DataFrame(cross_validate(tree, X_train, y_train, cv=10))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- So, this way for each fold you get more information.\n",
    "- `cross_val_score` was just returning that last column, but here we get the time spent.\n",
    "- We can also have it give us the training scores:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>fit_time</th>\n",
       "      <th>score_time</th>\n",
       "      <th>test_score</th>\n",
       "      <th>train_score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.003345</td>\n",
       "      <td>0.001592</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>0.698413</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.002634</td>\n",
       "      <td>0.001580</td>\n",
       "      <td>0.857143</td>\n",
       "      <td>0.687500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.002810</td>\n",
       "      <td>0.001530</td>\n",
       "      <td>0.714286</td>\n",
       "      <td>0.625000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.003013</td>\n",
       "      <td>0.001569</td>\n",
       "      <td>0.571429</td>\n",
       "      <td>0.718750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.002131</td>\n",
       "      <td>0.001339</td>\n",
       "      <td>0.714286</td>\n",
       "      <td>0.703125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.002035</td>\n",
       "      <td>0.001318</td>\n",
       "      <td>0.571429</td>\n",
       "      <td>0.718750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.002681</td>\n",
       "      <td>0.001337</td>\n",
       "      <td>0.714286</td>\n",
       "      <td>0.703125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.002220</td>\n",
       "      <td>0.002265</td>\n",
       "      <td>0.571429</td>\n",
       "      <td>0.718750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.002256</td>\n",
       "      <td>0.001436</td>\n",
       "      <td>0.714286</td>\n",
       "      <td>0.703125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.003524</td>\n",
       "      <td>0.002783</td>\n",
       "      <td>0.714286</td>\n",
       "      <td>0.703125</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   fit_time  score_time  test_score  train_score\n",
       "0  0.003345    0.001592    0.750000     0.698413\n",
       "1  0.002634    0.001580    0.857143     0.687500\n",
       "2  0.002810    0.001530    0.714286     0.625000\n",
       "3  0.003013    0.001569    0.571429     0.718750\n",
       "4  0.002131    0.001339    0.714286     0.703125\n",
       "5  0.002035    0.001318    0.571429     0.718750\n",
       "6  0.002681    0.001337    0.714286     0.703125\n",
       "7  0.002220    0.002265    0.571429     0.718750\n",
       "8  0.002256    0.001436    0.714286     0.703125\n",
       "9  0.003524    0.002783    0.714286     0.703125"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.DataFrame(cross_validate(tree, X_train, y_train, cv=10, return_train_score=True))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(This is not on by default because it takes extra time to predict on the training part of the fold each time)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So this is the plot we actually should have been making:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "max_depths = np.arange(1, 17)\n",
    "train_error = []\n",
    "cv_error = []\n",
    "for depth in max_depths:\n",
    "    tree = DecisionTreeClassifier(max_depth=depth, random_state=1)\n",
    "    cv_scores = cross_validate(tree, X_train, y_train, cv=10, return_train_score=True)\n",
    "    train_error.append(1 - cv_scores[\"train_score\"].mean())\n",
    "    cv_error.append(1 - cv_scores[\"test_score\"].mean())\n",
    "\n",
    "plt.plot(max_depths, train_error, label=\"training\");\n",
    "plt.plot(max_depths, cv_error, label=\"10-fold cv\");\n",
    "plt.xlabel(\"max depth\");\n",
    "plt.ylabel(\"error\");\n",
    "plt.title(\"error vs. max depth\");\n",
    "plt.legend();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- From now on, you should not make these kinds of plots with the test set.\n",
    "- Make sure you do cross-validation on the training data.\n",
    "- It's a bit unfortunate that they call it `\"test_score\"` in scikit-learn; for us this is a validation score. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### CPSC 330 supervised learning workflow\n",
    "\n",
    "1. Immediately split into train/test (before any exploratory data analysis).\n",
    "2. Use cross-validation on the training split for your model validation.\n",
    "3. Test your model once on the test set at the very end."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## True/False: cross-validation (10 min)\n",
    "\n",
    "1. $k$-fold cross validation calls `fit` $k$ times and `predict` $k$ times.\n",
    "2. The goal of cross-validation is to obtain a better estimate of test error than just using a single validation set.\n",
    "3. The main disadvantage of using a large $k$ in cross-validation is running time.\n",
    "4. $2$-fold cross validation is the same thing as using a validation set that's 50% the size of your training set.\n",
    "\n",
    "<br><br><br><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Summary\n",
    "\n",
    "- `train_test_split` randomly splits your data; set `random_state` to have the same split every time you run your code\n",
    "- Overfitting: train score much better than validation/test score\n",
    "- Underfitting: train score is poor, and is similar to validation/test score\n",
    "- A nonzero \"best error\" exists because the targets are generally not a deterministic function of the features\n",
    "- Fundamental tradeoff: as you move to more complex models your training score goes up but the train-test gap also goes up; test error may go up or down\n",
    "- Validation data: used for hyperparameter tuning\n",
    "- Test data: used for model assessment after tuning\n",
    "- Deployment: when you are given some new X-values and you need to predict the corresponding targets for some (hopefully) useful purpose\n",
    "- Cross-validation: better estimate of test score than just a regular validation set \n",
    "  - Pros: more accurate score estimates, thus better models; also gives a measure of uncertainty in the scores (more on this later)\n",
    "  - Cons: makes code a bit more complicated, makes code slower\n",
    "- First part of our standard recipe for supervised learning: train/test split, hyperparameter tuning with cross-validation, test on test set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
